2 Äëÿ ðàáîòû èíäèêàòîðà ñëåäóåò ïîëîæèòü ôàéëû
\r
5 â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include\
\r
7 â ïàïêó (äèðåêòîðèþ): MetaTrader\indicators\
\r
9 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
\r
10 //| J4Bollinger Bands.mq4 |
\r
11 //| Copyright © 2006, Nikolay Kositsin |
\r
12 //| Khabarovsk, farria@mail.redcom.ru |
\r
13 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
\r
14 #property copyright "Nikolay Kositsin"
\r
15 #property link "farria@mail.redcom.ru"
\r
16 //---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
\r
17 #property indicator_chart_window
\r
18 //---- êîëè÷åñòâî èíäèêàòîðíûõ áóôôåðîâ
\r
19 #property indicator_buffers 5
\r
20 //---- öâåòà èíäèêàòîðà
\r
21 #property indicator_color1 Red
\r
22 #property indicator_color2 Blue
\r
23 #property indicator_color3 Lime
\r
24 #property indicator_color4 Blue
\r
25 #property indicator_color5 Red
\r
26 //---- ñòèëü ëèíèé èíäèêàòîðà
\r
27 #property indicator_style1 4
\r
28 #property indicator_style2 2
\r
29 #property indicator_style3 4
\r
30 #property indicator_style4 2
\r
31 #property indicator_style5 4
\r
32 //---- ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþææ+
\r
33 extern int Bands_Period = 100; // ïåðèîä óñðåäíåíèÿ J2Bollinger Bands
\r
34 extern double Bands_Deviations = 2.0; // äåâèàòàöèÿ
\r
35 extern int MA_method = 0; // ìåòîä óñðåäíåíèÿ
\r
36 extern int MA_Smooth = 20; // ãëóáèíà ñãëàæèâàíèÿ ïîëó÷åííîãî Moving Avereges
\r
37 extern int Bands_Smooth = 20; // ãëóáèíà ñãëàæèâàíèÿ ïîëó÷åííûõ Bollinger Bands
\r
38 extern int Smooth_Phase = 100; // ïàðàìåòð ñãëàæèâàíèÿ, èçìåíÿþùèéñÿ â ïðåäåëàõ -100 ... +100, âëèÿåò íà êà÷åñòâî ïåðåõîäíîãî ïðîöåññà;
\r
39 extern int Bands_Shift = 0; // cäâèã èíäèêàòîðà âäîëü îñè âðåìåíè
\r
40 extern int Input_Price_Customs = 0; //Âûáîð öåí, ïî êîòîðûì ïðîèçâîäèòñÿ ðàñ÷¸ò èíäèêàòîðà
\r
41 //(0-CLOSE, 1-OPEN, 2-HIGH, 3-LOW, 4-MEDIAN, 5-TYPICAL, 6-WEIGHTED, 7-Heiken Ashi Close, 8-SIMPL, 9-TRENDFOLLOW, 10-0.5*TRENDFOLLOW,
\r
42 //11-Heiken Ashi Low, 12-Heiken Ashi High, 13-Heiken Ashi Open, 14-Heiken Ashi Close.)
\r
43 //---- æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ+
\r
44 //---- èíäèêàòîðíûå áóôôåðû
\r
45 double UpperBuffer2 [];
\r
46 double UpperBuffer1 [];
\r
47 double JMovingBuffer[];
\r
48 double LowerBuffer1 [];
\r
49 double LowerBuffer2 [];
\r
50 double Series_buffer[];
\r
51 //---- ïåðåìåííûå ñ ïëàâàþùåé òî÷êîé
\r
52 double deviation1,deviation2,Temp_Series,sum,midline,priceswing,Resalt;
\r
53 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
\r
54 //| J4Bollinger Bands initialization function |
\r
55 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
\r
58 //---- îïðåäåëåíèå ñòèëÿ èñïîëíåíèÿ ãðàôèêà
\r
59 SetIndexStyle(0,DRAW_LINE);
\r
60 SetIndexStyle(1,DRAW_LINE);
\r
61 SetIndexStyle(2,DRAW_LINE);
\r
62 SetIndexStyle(3,DRAW_LINE);
\r
63 SetIndexStyle(4,DRAW_LINE);
\r
64 //---- 4 èíäèêàòîðíûõ áóôôåðà èñïîëüçîâàíû äëÿ ñ÷¸òà.
\r
65 IndicatorBuffers(6);
\r
66 SetIndexBuffer(0,UpperBuffer2 );
\r
67 SetIndexBuffer(1,UpperBuffer1 );
\r
68 SetIndexBuffer(2,JMovingBuffer);
\r
69 SetIndexBuffer(3,LowerBuffer1 );
\r
70 SetIndexBuffer(4,LowerBuffer2 );
\r
71 SetIndexBuffer(5,Series_buffer);
\r
72 //---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
\r
73 SetIndexEmptyValue(0,0);
\r
74 SetIndexEmptyValue(1,0);
\r
75 SetIndexEmptyValue(2,0);
\r
76 SetIndexEmptyValue(3,0);
\r
77 SetIndexEmptyValue(4,0);
\r
78 //---- óñòàíîâêà íîìåðà áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò îòðèñîâûâàòüñÿ èíäèêàòîð
\r
79 int drawbegin=Bands_Period+30+Bands_Shift;
\r
80 SetIndexDrawBegin(0,drawbegin);
\r
81 SetIndexDrawBegin(1,drawbegin);
\r
82 SetIndexDrawBegin(2,drawbegin);
\r
83 SetIndexDrawBegin(3,drawbegin);
\r
84 SetIndexDrawBegin(4,drawbegin);
\r
85 //---- ãîðèçîíòàëüíûé ñäâèã èíäèêàòîðíûõ ëèíèé
\r
86 SetIndexShift (0, Bands_Shift);
\r
87 SetIndexShift (1, Bands_Shift);
\r
88 SetIndexShift (2, Bands_Shift);
\r
89 SetIndexShift (3, Bands_Shift);
\r
90 SetIndexShift (4, Bands_Shift);
\r
91 //---- èìÿ äëÿ îêîí äàííûõ è ëýéáà äëÿ ñóáúîêîí.
\r
92 IndicatorShortName ("J4Bollinger Bands( Period="+Bands_Period+", Deviations="+Bands_Deviations+")");
\r
93 SetIndexLabel (0, "Upper2 Bands");
\r
94 SetIndexLabel (1, "Upper1 Bands");
\r
95 SetIndexLabel (3, "Lower1 Bands");
\r
96 SetIndexLabel (4, "Lower2 Bands");
\r
99 case 0: SetIndexLabel (2, "JMoving Avereges JSMA ("+Bands_Period+")");break;
\r
100 case 1: SetIndexLabel (2, "JMoving Avereges JEMA ("+Bands_Period+")");break;
\r
101 case 2: SetIndexLabel (2, "JMoving Avereges JSSMA("+Bands_Period+")");break;
\r
102 case 3: SetIndexLabel (2, "JMoving Avereges JLWMA("+Bands_Period+")");break;
\r
103 default: SetIndexLabel (2, "JMoving Avereges JSMA ("+Bands_Period+")");
\r
106 IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
\r
107 //---- óñòàíîâêà àëåðòîâ íà íåäîïóñòèìûå çíà÷åíèÿ âõîäíûõ ïàðàìåòðîâ ======================================================================================+
\r
108 if(Smooth_Phase<-100){Alert("Ïàðàìåòð Smooth_Phase äîëæåí áûòü îò -100 äî +100" + " Âû ââåëè íåäîïóñòèìîå " +Smooth_Phase+ " áóäåò èñïîëüçîâàíî -100");}//|
\r
109 if(Smooth_Phase> 100){Alert("Ïàðàìåòð Smooth_Phase äîëæåí áûòü îò -100 äî +100" + " Âû ââåëè íåäîïóñòèìîå " +Smooth_Phase+ " áóäåò èñïîëüçîâàíî 100");}//|
\r
110 if(MA_Smooth<1) {Alert("Ïàðàìåòð MA_Smooth äîëæåí áûòü íå ìåíåå 1" + " Âû ââåëè íåäîïóñòèìîå " +MA_Smooth+ " áóäåò èñïîëüçîâàíî 1");}////////////////|
\r
111 if(MA_Smooth<1) {Alert("Ïàðàìåòð Bands_Smooth äîëæåí áûòü íå ìåíåå 1" + " Âû ââåëè íåäîïóñòèìîå " +Bands_Smooth + " áóäåò èñïîëüçîâàíî 1");}/////////|
\r
112 if(Bands_Period<1) {Alert("Ïàðàìåòð Bands_Period äîëæåí áûòü íå ìåíåå 1 "+ " Âû ââåëè íåäîïóñòèìîå " +Bands_Period+ " áóäåò èñïîëüçîâàíî 1");}//////////|
\r
113 if(MA_method<0) {Alert("Ïàðàìåòð MA_method äîëæåí áûòü îò 0 äî 3" + " Âû ââåëè íåäîïóñòèìîå " +MA_method+ " áóäåò èñïîëüçîâàíî 0");}////////////////|
\r
114 if(MA_method>3) {Alert("Ïàðàìåòð MA_method äîëæåí áûòü îò 0 äî 3" + " Âû ââåëè íåäîïóñòèìîå " +MA_method+ " áóäåò èñïîëüçîâàíî 0");}////////////////|
\r
115 PriceSeriesAlert(Input_Price_Customs);/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////|
\r
116 //+========================================================================================================================================================+
\r
117 //---- êîðåêöèÿ íåäîïóñòèìîãî çíà÷åíèÿ ïàðàìåòðà Bands_Period
\r
118 if (Bands_Period<1)Bands_Period=1;
\r
119 //---- çàâåðøåíèå èíèöèàëèçàöèè
\r
122 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
\r
123 //| J4Bollinger Bands iteration function |
\r
124 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
\r
127 //---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷¸òà
\r
128 if(Bars-1<=Bands_Period) return(0);
\r
129 //----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ
\r
130 //---- áëîêèðîâàíèå ïåðåñ÷¸òà âñåõ ïîäñ÷èòàííûõ è îòðèñîâàííûõ áàðîâ ïðè ïîäêëþ÷åíèè ê èíòåðíåòó
\r
131 int reset,MaxBar,MaxBarBB,bar,kk,counted_bars=INDICATOR_COUNTED(0); INDICATOR_COUNTED(1);
\r
132 //---- ïðîâåðêà íà âîçìîæíûå îøèáêè
\r
133 if (counted_bars<0){INDICATOR_COUNTED(-1);return(-1);}
\r
134 //---- ïîñëåäíèé ïîäñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí
\r
135 //---- (áåç ýòîãî ïåðåñ÷¸òà äëÿ counted_bars ôóíêöèÿ JJMASeries áóäåò ðàáîòàòü íåêîððåêòíî!!!)
\r
136 if (counted_bars>0) counted_bars--;
\r
137 //----+ Ââåäåíèå è èíèöèàëèçàöèÿ âíóòðåííèõ ïåðåìåííûõ ôóíêöèè JJMASeries, nJMAnumber=5(Ïÿòü îáðàùåíèé ê ôóíêöèè)
\r
138 if (counted_bars==0)if (Bands_Smooth>1)JJMASeriesReset(5);else JJMASeriesReset(1);
\r
139 //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ
\r
140 int limit=Bars-counted_bars-1;MaxBar=Bars-1-Bands_Period;MaxBarBB=MaxBar-30-Bands_Period;
\r
141 //----+ çàãðóçêà âõîäíûõ öåí â áóôôåð äëÿ ðàñ÷¸òà
\r
142 for(bar=limit;bar>=0;bar--)Series_buffer[bar]=PriceSeries(Input_Price_Customs,bar);
\r
143 //---- ïðîâåðêà áàðà íà äîñòàòî÷íîñòü äëÿ ðàñ÷¸òà Bollinger Bands
\r
144 //---- èíèöèàëèçàöèÿ íóëÿ
\r
147 for(bar=limit;bar>=MaxBar;bar--)JMovingBuffer[bar]=0;
\r
150 //----+ öèêë ðàñ÷¸òà Moving Avereges
\r
151 for(bar=limit;bar>=0;bar--)
\r
153 //----+ ôîðìóëà äëÿ ðàñ÷¸òà Moving Avereges
\r
156 case 0: Temp_Series=iMAOnArray(Series_buffer,0,Bands_Period,0,MODE_SMA, bar);break;
\r
157 case 1: Temp_Series=iMAOnArray(Series_buffer,0,Bands_Period,0,MODE_EMA, bar);break;
\r
158 case 2: Temp_Series=iMAOnArray(Series_buffer,0,Bands_Period,0,MODE_SMMA,bar);break;
\r
159 case 3: Temp_Series=iMAOnArray(Series_buffer,0,Bands_Period,0,MODE_LWMA,bar);break;
\r
160 default: Temp_Series=iMAOnArray(Series_buffer,0,Bands_Period,0,MODE_SMA, bar);
\r
162 //----+ ñãëàæèâàíèå ïîëó÷åííîãî Moving Avereges
\r
163 //----+ îáðàùåíèå ê ôóíêöèè JJMASeries çà íîìåðîì 0. Ïàðàìåòðû nJMAPhase è nJMALength íå ìåíÿþòñÿ íà êàæäîì áàðå (nJMAdin=0)
\r
164 Resalt=JJMASeries(0,0,MaxBar,limit,Smooth_Phase,MA_Smooth,Temp_Series,bar,reset);
\r
165 //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè
\r
166 if(reset!=0){INDICATOR_COUNTED(-1);return(-1);}
\r
167 JMovingBuffer[bar]=Resalt;
\r
169 //---- ÐÀÑ×¨Ò Bollinger Bands
\r
170 //---- èíèöèàëèçàöèÿ íóëÿ
\r
171 if (limit>MaxBarBB)
\r
173 for(bar=limit;bar>=MaxBarBB;bar--)
\r
175 UpperBuffer2[bar]=0;
\r
176 UpperBuffer1[bar]=0;
\r
177 LowerBuffer1[bar]=0;
\r
178 LowerBuffer2[bar]=0;
\r
182 for(bar=limit;bar>=0;bar--)
\r
185 midline=JMovingBuffer[bar];
\r
186 kk=bar+Bands_Period-1;
\r
189 priceswing=PriceSeries(Input_Price_Customs,kk)-midline;
\r
190 sum+=priceswing*priceswing;
\r
193 deviation2=Bands_Deviations*MathSqrt(sum/Bands_Period);
\r
194 deviation1=0.5*deviation2;
\r
195 if (Bands_Smooth>1)
\r
197 //----+ âû÷èñëåíèå è JMA ñãëàæèâàíèå Bollinger Bands
\r
198 //----+ ----------------------------------------------------------------------------------------+
\r
199 //----+ ÷åòûðå ïàðàëëåëüíûõ îáðàùåíèÿ ê ôóíêöèè JJMASeries çà íîìåðàìè 1, 2, 3, 4.
\r
200 //----+ Ïàðàìåòðû nJJMALength íå ìåíÿtòñÿ íà êàæäîì áàðå (nJJMAdin=0)
\r
201 //----+ ----------------------------------------------------------------------------------------+
\r
202 Resalt=JJMASeries(1,0,MaxBarBB-1,limit,Smooth_Phase,Bands_Smooth ,midline+deviation2,bar,reset);
\r
203 //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè
\r
204 if(reset!=0){INDICATOR_COUNTED(-1);return(-1);}
\r
205 UpperBuffer2[bar]=Resalt;
\r
206 //----+ ----------------------------------------------------------------------------------------+
\r
207 Resalt=JJMASeries(2,0,MaxBarBB-1,limit,Smooth_Phase,Bands_Smooth ,midline+deviation1,bar,reset);
\r
208 //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè
\r
209 if(reset!=0){INDICATOR_COUNTED(-1);return(-1);}
\r
210 UpperBuffer1[bar]=Resalt;
\r
211 //----+ ----------------------------------------------------------------------------------------+
\r
212 Resalt=JJMASeries(3,0,MaxBarBB-1,limit,Smooth_Phase,Bands_Smooth ,midline-deviation1,bar,reset);
\r
213 //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè
\r
214 if(reset!=0){INDICATOR_COUNTED(-1);return(-1);}
\r
215 LowerBuffer1[bar]=Resalt;
\r
216 //----+ ----------------------------------------------------------------------------------------+
\r
217 Resalt=JJMASeries(4,0,MaxBarBB-1,limit,Smooth_Phase,Bands_Smooth ,midline-deviation2,bar,reset);
\r
218 //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè
\r
219 if(reset!=0){INDICATOR_COUNTED(-1);return(-1);}
\r
220 LowerBuffer2[bar]=Resalt;
\r
221 //----+ ----------------------------------------------------------------------------------------+
\r
225 //----+ âû÷èñëåíèå Bollinger Bands áåç JMA ñãëàæèâàíèÿ
\r
226 UpperBuffer2[bar]=midline+deviation2;
\r
227 UpperBuffer1[bar]=midline+deviation1;
\r
228 LowerBuffer1[bar]=midline-deviation1;
\r
229 LowerBuffer2[bar]=midline-deviation2;
\r
233 //---- çàâåðøåíèå âû÷èñëåíèé çíà÷åíèé èíäèêàòîðà
\r
236 //+---------------------------------------------------------------------------------------------------------------------------+
\r
237 //----+ Ââåäåíèå ôóíêöèè JJMASeries (ôàéë JJMASeries.mqh ñëåäóåò ïîëîæèòü â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include)
\r
238 //----+ Ââåäåíèå ôóíêöèè JJMASeriesReset (äîïîëíèòåëüíàÿ ôóíêöèÿ ôàéëà JJMASeries.mqh)
\r
239 //----+ Ââåäåíèå ôóíêöèè INDICATOR_COUNTED(äîïîëíèòåëüíàÿ ôóíêöèÿ ôàéëà JJMASeries.mqh)
\r
240 #include <JJMASeries.mqh>
\r
241 //+---------------------------------------------------------------------------------------------------------------------------+
\r
242 //----+ Ââåäåíèå ôóíêöèè PriceSeries, ôàéë PriceSeries.mqh ñëåäóåò ïîëîæèòü â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include
\r
243 //----+ Ââåäåíèå ôóíêöèè PriceSeriesAlert (äîïîëíèòåëüíàÿ ôóíêöèÿ ôàéëà PriceSeries.mqh)
\r
244 #include <PriceSeries.mqh>
\r
245 //+---------------------------------------------------------------------------------------------------------------------------+